
#define N 100 /* nombre de places dans le tampon */
struct sem_s mutex, vide, plein;
sem_init(&mutex, 1); /* controle d'acces au tampon */
sem_init(&vide, N); /* nb de places libres */
sem_init(&plein, 0); /* nb de places occupees */

struct objet_t
{
	int nombre; 
};

void producteur (void)
{
	objet_t objet ;
	while (1) {
		produire_objet(&objet); /* produire l'objet suivant */
		sem_down(&vide); /* dec. nb places libres */
		sem_down(&mutex); /* entree en section critique */
		mettre_objet(objet); /* mettre l'objet dans le tampon */
		sem_up(&mutex); /* sortie de section critique */
		sem_up(&plein); /* inc. nb place occupees */
	}
}
void consommateur (void)
{
	objet_t objet ;
	while (1) {
		sem_down(&plein); /* dec. nb emplacements occupes */
		sem_down(&mutex); /* entree section critique */
		retirer_objet (&objet); /* retire un objet du tampon */
		sem_up(&mutex); /* sortie de la section critique */
		sem_up(&vide); /* inc. nb emplacements libres */
		utiliser_objet(objet); /* utiliser l'objet */
	}
}



produire_objet(objet_t *objet)
{
	objet->nombre+=50;
	printf("le nombre de produit est %d",objet->nombre);	
}

mettre_objet(objet_t *objet)
{
	objet->nombre++;
	printf("le nombre de produit est %d",objet->nombre);
}

retirer_objet (objet_t *objet)
{
	objet->nombre--;
	printf("le nombre de produit est %d",objet->nombre);
}

utiliser_objet(objet_t *objet)
{
	objet->nombre-=50;
	printf("le nombre de produit est %d",objet->nombre);
}